﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Coffee.Lists
{
    public partial class Lst_Formula : Form
    {
        cls_Formula cls = new cls_Formula();
        cls_Product pro = new cls_Product();
        Lst_Unit unit = new Lst_Unit();

        DataTable Pro_Popup = new DataTable();
        
        public Lst_Formula()
        {
            InitializeComponent();
        }

        private void Lst_Formula_Load(object sender, EventArgs e)
        {
            try
            {
                gridLst.SetData(cls.GetAll());
                cbProduct.Properties.DataSource = pro.GetAllByMenuItem();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void cbProduct_EditValueChanged(object sender, EventArgs e)
        {
            DataTable Data = (DataTable)cbProduct.Properties.DataSource;
            DataRow[] rS = Data.Select("ProductID=" + TSoft.Cvert.ToInt32(cbProduct.EditValue, 0));
            if (!object.Equals(rS, null) && rS.Length > 0)
            {
                txtName.Text = TSoft.Cvert.ToString(rS[0]["Name"], "");
                grid.SetData(cls.GetDetail(TSoft.Cvert.ToInt32(cbProduct.EditValue, 0)));

                iControls.Uti.SetDropDown(grid, unit.GetAll(), "UnitID", "Name", "ID", "Name", "Tên ĐVT", "");
                Pro_Popup = pro.GetAllByMaterial();
                iControls.Uti.SetDropDown(grid, Pro_Popup, "ProductId", "Name", "ProductID", "Name", "Tên nguyên liệu", "");
            }
        }

        private bool IsValid(DataTable Detail)
        {
            foreach (DataRow row in Detail.Rows)
            {
                DataRow[] rS = Detail.Select("ProductID=" + TSoft.Cvert.ToInt32(row["ProductID"], 0));
                if (!object.Equals(rS, null) && rS.Length > 1)
                {
                    DataRow[] arr = Pro_Popup.Select("ProductID=" + TSoft.Cvert.ToInt32(row["ProductID"], 0));
                    MessageBox.Show("Nguyên vật liệu : " + TSoft.Cvert.ToString(arr[0]["Name"], "") + " không thể xuất hiện 2 dòng.",
                        "Thông báo.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            return true;
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            if (TSoft.Cvert.ToInt32(cbProduct.EditValue, 0) <= 0)
            {
                MessageBox.Show("Bạn chưa chọn thực đơn cần khởi tạo công thức.\nVui lòng chọn trước khi cập nhật.", "Thông báo.",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            view.PostEditor();
            DataTable Detail = (DataTable)grid.DataSource;
            if (Detail == null || Detail.Rows.Count <= 0)
            {
                MessageBox.Show("Bạn chưa chọn nguyên liệu để chế biến ra thực đơn.\nVui lòng chọn trước khi cập nhật.", "Thông báo.",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!IsValid(Detail)) return;

            try
            {
                cls.ProductID = TSoft.Cvert.ToInt32(cbProduct.EditValue, 0);
                cls.Notes = txtNote.Text;
                cls.Update(Detail);
                MessageBox.Show("Dữ liệu đã được lưu.");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void viewLst_DoubleClick(object sender, EventArgs e)
        {
            DataRow row = viewLst.GetFocusedDataRow();
            if (object.Equals(row, null)) return;
            cbProduct.EditValue = TSoft.Cvert.ToInt32(row["ProductID"], 0);
            cbProduct_EditValueChanged(cbProduct, e);
        }

        private void view_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column.FieldName.ToLower() == "productid" && TSoft.Cvert.ToInt32(e.Value, 0) > 0)
            {
                view.PostEditor();

                int iCount = 0;
                for (int i = 0; i < view.RowCount; i++)
                {
                    if (TSoft.Cvert.ToInt32(view.GetRowCellValue(i, e.Column), 0) == TSoft.Cvert.ToInt32(e.Value, 0))
                        iCount++;
                }
                if (iCount > 1)
                {
                    view.SetRowCellValue(view.GetSelectedRows()[0], e.Column, 0);
                    MessageBox.Show("Nguyên liệu này đã được chọn, bạn không thể chọn thêm.", "Thông báo.",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}
